package com.wlz.bitOperation;

/**
 *
 *  位运算 -- 左移 (<<)
 *
 *   （正负数皆右补0）
 * @author： wlz
 * @Date 2021/1/19 14:34
 * @description： TODO
 * @version: 1.0
 */
public class ShiftLeft {

    public static void main(String[] args) {

        /**
         * 首先会将5转为2进制表示形式(java中，整数默认就是int类型,也就是32位):
         *
         * 0000 0000 0000 0000 0000 0000 0000 0101   转化为二进制 低位补0：
         *
         * 0000 0000 0000 0000 0000 0000 0001 01 00   然后左移2位后，换算成10进制为20
         *
         */
        // 结果 20
        System.out.println(5<<2);

        /**
         *   0000 0000 0000 0000 0000 0000 0000 0101  (5的二进制)
         *
         *   1111 1111 1111 1111 1111 1111 1111 1010  （5的反码）
         *
         *   1111 1111 1111 1111 1111 1111 1111 1011  （5 的补码  、-5 的二进制 ）
         *
         *   1111 1111 1111 1111 1111 1111 1110 11 00  (左移2位)
         *
         *   0000 0000 0000 0000 0000 0000 0001 0011 (对二进制取反)
         *
         *   0000 0000 0000 0000 0000 0000 0001 0100  (对取反后的二进制加1 结果为 20 加负号 为 -20 )
         *
         */
        // 结果 -20
        System.out.println(-5<<2);

        /**
         *  0000 0000 0000 0000 0000 0000 0001 0000
         *
         *  0000 0000 0000 0000 0000 0000 0010 0000 (左移1位)
         */
        // 结果 32
        System.out.println(16<<1);

        System.out.println(Integer.toBinaryString(16));


        // 结果 64
        System.out.println(32<<1);

    }

}
